import axios from 'axios'

// 创建axios实例
const service = axios.create({
  baseURL: '/api',
  timeout: 15000
})

// 请求拦截器
service.interceptors.request.use(
  config => {
    // 从localStorage中获取token
    const token = localStorage.getItem('token')
    if (token) {
      config.headers['Authorization'] = `Bearer ${token}`
    }
    return config
  },
  error => {
    console.error('请求错误:', error)
    return Promise.reject(error)
  }
)

// 响应拦截器
service.interceptors.response.use(
  response => {
    const res = response.data
    
    // 假设后端返回格式为 { code: 0, data: {}, message: '' }
    if (res.code !== 0) {
      // 处理错误码
      switch (res.code) {
        case 401:
          // 未登录，清除token并跳转到登录页
          localStorage.removeItem('token')
          localStorage.removeItem('userInfo')
          // 这里可以添加跳转到登录页的逻辑
          break
        case 403:
          alert('无权限访问')
          break
        default:
          alert(res.message || '请求失败')
      }
      return Promise.reject(new Error(res.message || '请求失败'))
    }
    return res.data
  },
  error => {
    console.error('响应错误:', error)
    // 网络错误处理
    if (!error.response) {
      alert('网络错误，请检查网络连接')
    } else {
      const status = error.response.status
      switch (status) {
        case 401:
          localStorage.removeItem('token')
          localStorage.removeItem('userInfo')
          alert('登录已过期，请重新登录')
          break
        case 500:
          alert('服务器错误')
          break
        default:
          alert('请求失败')
      }
    }
    return Promise.reject(error)
  }
)

// 封装常用的API方法
export const api = {
  // 打卡相关API
  checkIn: {
    // 获取打卡列表
    getList: (params) => service.get('/checkins', { params }),
    // 获取打卡详情
    getDetail: (id) => service.get(`/checkins/${id}`),
    // 创建打卡
    create: (data) => service.post('/checkins', data),
    // 删除打卡
    delete: (id) => service.delete(`/checkins/${id}`),
    // 点赞/取消点赞
    toggleLike: (id) => service.post(`/checkins/${id}/like`),
    // 获取用户的打卡记录
    getUserCheckIns: (userId, params) => service.get(`/users/${userId}/checkins`, { params })
  },
  
  // 评论相关API
  comment: {
    // 获取评论列表
    getList: (checkInId, params) => service.get(`/checkins/${checkInId}/comments`, { params }),
    // 创建评论
    create: (checkInId, data) => service.post(`/checkins/${checkInId}/comments`, data),
    // 删除评论
    delete: (id) => service.delete(`/comments/${id}`)
  },
  
  // 用户相关API
  user: {
    // 登录
    login: (data) => service.post('/auth/login', data),
    // 注册
    register: (data) => service.post('/auth/register', data),
    // 获取用户信息
    getInfo: () => service.get('/user/info'),
    // 更新用户信息
    updateInfo: (data) => service.put('/user/info', data),
    // 上传头像
    uploadAvatar: (formData) => service.post('/user/avatar', formData, {
      headers: {
        'Content-Type': 'multipart/form-data'
      }
    })
  },
  
  // 上传图片
  upload: {
    image: (formData) => service.post('/upload/image', formData, {
      headers: {
        'Content-Type': 'multipart/form-data'
      }
    })
  }
}

// 上传图片的辅助函数
export const uploadImage = (file) => {
  const formData = new FormData()
  formData.append('file', file)
  return api.upload.image(formData)
}

export default service